package useDeprecatedAPI;



import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.stream.JsonReader;

import java.io.StringReader;

/*
弃用API： gson2.10
parse(JsonReader)：从 JsonReader 中解析 JSON 数据并返回一个 JsonElement 对象
parse(Reader)：从 Reader 中解析 JSON 字符串，返回一个 JsonElement 对象
JsonPrimitive.getAsCharacter()：从 JsonPrimitive 中获取 char 类型的数据
JsonElement()：创建 JsonElement 的子类对象
 */
/*
函数调用解释：
建立一个JsonReader对象，
利用parse(JsonReader)解析json数据并转化为reader对象，
再用parse(Reader)从reader对象中解析json字符串，返回一个JsonElement对象并赋值给已经创建好的JsonElement，
再转成JsonPrimitive，利用JsonPrimitive.getAsCharacter从JsonPrimitive中获取char数据

上面就形成了四个方法的一个依赖关系

最后再用一次parse(JsonReader)
 */
public class JsonElementParsingAndConversion {
    public static void processJsonData() {
        try {
            // 1. 创建一个JsonReader对象，读取一个JSON字符串
            String jsonString = "{\"name\": \"Alice\", \"age\": 25}";
            JsonReader jsonReader = new JsonReader(new StringReader(jsonString));
            System.out.println("原始 JSON 字符串：" + jsonString);

            // 2. 使用parse(JsonReader)方法解析jsonReader，返回一个JsonElement
            JsonElement jsonElement = new JsonElement() {
                @Override
                public JsonElement deepCopy() {
                    return null;
                }
            };
            JsonParser parser=new JsonParser();
            jsonElement=parser.parse(jsonReader);
            System.out.println("通过parse(JsonReader)解析后的JsonElement：" + jsonElement);

            // 3. 使用parse(Reader)方法解析JSON字符串并将其转为JsonElement
            JsonElement jsonElementFromReader = new JsonElement() {
                @Override
                public JsonElement deepCopy() {
                    return null;
                }
            };
            jsonElementFromReader=parser.parse(new StringReader(jsonString));
            System.out.println("通过parse(Reader)解析后的JsonElement：" + jsonElementFromReader);

            // 4. 将JsonElement转为JsonPrimitive（假设取一个字段的值）
            JsonPrimitive jsonPrimitive = jsonElementFromReader.getAsJsonObject().get("name").getAsJsonPrimitive();
            System.out.println("从JsonElement转化为JsonPrimitive：" + jsonPrimitive);

            // 5. 使用JsonPrimitive的getAsCharacter()获取字符
            char firstChar = jsonPrimitive.getAsCharacter();
            System.out.println("通过getAsCharacter()获取的字符：" + firstChar);

            //6.将char转换为JsonReader再用parse(JsonReader)解析 闭环
            String charString = String.valueOf(firstChar);  // 将char转换为字符串
            StringReader stringReader = new StringReader(charString);  // 使用StringReader包装字符串

            JsonReader jsonReaderNew = new JsonReader(stringReader);
            JsonElement jsonElementNew=new JsonElement() {
                @Override
                public JsonElement deepCopy() {
                    return null;
                }
            };
            jsonElementNew=parser.parse(jsonReaderNew);
            System.out.println("再次通过parse(JsonReader)获得的JsonElement:"+jsonElementNew);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
